package code.c02_list.linkList;

import code.c02_list.linkList.LinkListClass;
import code.c02_list.clinkList.LinkNode;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/9/18 18:35
 * @package code.c02_list.classwork.examples
 * @description 有一个整数单链表，其中可能存在多个值相同的节点，
 * 设计一个算法，删除所有最大值的结点。
 *
 */

public class Exam_2_12 {
    public static void delMaxNodes(LinkListClass<Integer> L){
        Integer maxe;
        // p 指针指向首节点
        LinkNode<Integer> p = L.head.next;
        // pre 指向头节点
        LinkNode<Integer> pre =  L.head;

        // 最大的节点指针
        maxe = p.data;

        // 找最大的指针 maxe
        while (p.next!=null){
            if (p.next.data > maxe){
                maxe = p.next.data;
            }
            p = p.next;
        }

        // p 指向pre 的后继节点
        p = pre.next;

        // p 遍历所有的节点
        while (p!= null){

            // 删除最大值指针
            if (p.data == maxe){

                pre.next = p.next;
                p = pre.next;
            }else {
                // 让 p 后移一个节点
                pre = pre.next;
                // 让 p 指向 pre 的后继节点
                p = pre.next;
            }
        }
    }
}
